﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace BibliotecaClasse
{
    public class RN
    {
        DAOXMLDespetador dao = new DAOXMLDespetador();

        /**
         * método para validar formato de hora inserido pelo usuário
         */
        public Boolean ValidaHora(String hora)
        {
            
            Match match = Regex.Match(hora, "^(?:0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$");
            
            if (match.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
            
        }

        /**
         * método verifica se dia passado como parametro 
         * é igual ao dia do sistema no formato 0-6
         */ 
        public Boolean verificaDia(String dia)
        {
            int diaSistema = Convert.ToInt16(DateTime.Now.DayOfWeek);

            if (diaSistema == ConverteDia(dia))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /**
         * método verifica se algum dos alarmes contidos na lista
         * é igual a hora atual do sistema
         */
        public Alarme IsTime(List<Alarme> lista, String agora)
        {

            Alarme alarme = null;

            foreach (Alarme alarmXML in lista)
            {
                if (alarmXML.Hora == agora && alarmXML.Ativo == "S" && verificaDia(alarmXML.Dia))
                {
                    alarme = alarmXML; ;
                }
                
            }
            return alarme;
            
        
        }

        /**
         * método para retorna Lista de Alarmes
         */
        public List<Alarme> RetornaLista()
        {
            return dao.ListarAlarmes();
        }


        /**
         * valida se dia informado pelo usuario é valido de 0-6
         */
        public Boolean ValidaDia(int dia)
        {
            if (dia >= 0 && dia < 7)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /**
         * método converte dia informado no formato seg,ter,qua,qui,sex,sab,dom
         * no formato do sistema 1,2,3,4,5,6,0
         */
        public int ConverteDia(String dia)
        {
            switch (dia)
            {
                case "seg":
                    return 1;
                    break;
                case "ter":
                    return 2;
                    break;
                case "qua":
                    return 3;
                    break;
                case "qui":
                    return 4;
                    break;
                case "sex":
                    return 5;
                    break;
                case "sab":
                    return 6;
                    break;
                case "dom":
                    return 0;
                    break;
                default:
                    return 8;
                    break;

            }
        }

        /**
         * método valida se a informação inserida no campo ativo
         * é igual a "S" ou "N"
         */
        public Boolean ValidaAtivo(String ativo)
        {
            if (ativo == "S" || ativo == "N")
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /**
         * método para excluir alarme de arquivo xml
         */
        public void ExcluiAlarme(int cod)
        {
            dao.ExcluirAlarme(cod);
        }

        /**
         * método para editar alarme de arquivo xml
         */
        public void EditaAlarme(Alarme alarme)
        {
            dao.EditarAlarme(alarme);
        }

        /**
         * método para adicionar alarme em arquivo xml
         */
        public void AdicionaAlarme(Alarme alarme)
        {
            dao.AdicionarAlarme(alarme);
        }

        /**
         * método para verificar se registro existe a partir do codigo informado
         */ 
        public Boolean VerificaExiste(int cod)
        {
            return dao.VerificarExiste(cod);
        }

        public String FixHour(String hour)
        {
            String[] hourSplit = Regex.Split(hour, ":");

            if (hourSplit[0].Length < 2)
            {
                return "0" + hour;
            }
            else
            {
                return hour;
            }

        }

        public Boolean IsNumeric(String check)
        {
            Match match = Regex.Match(check, "^[0-9]+$");

            if (match.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }



    }
}
